The chromatic adaptation function of the human visual system allows humans to maintain constant perceived color under different ambient lighting conditions. For example, an object that appears red when illuminated by sunlight may be perceived as red when illuminated by an indoor electric light.
Some displays account for different ambient lighting conditions or the chromatic adaptation of the human visual system. As a result, user experience may be improved by making color shifts imperceptible to a user viewing such a display under different ambient lighting conditions. For example, the white point of a display may appear white to a user in outdoor ambient lighting conditions, and may be adjusted using a chromatic adaptation transform (CAT) to continue to appear white to the user after the user moves to an indoor environment where the user's eyes will adapt to the warmer light produced by indoor light sources.
CATs are able to predict corresponding colors. A pair of corresponding colors consists of a color observed under one illuminant (e.g., direct sunlight, etc.), and another color that has the same appearance when observed under a different illuminant (e.g., artificial indoor light, etc.). This has industrial applicability, for example, in the realm of multiple displays that are receiving the same input image data from a source. For example, in a scenario where a laptop computer and a smartphone receive the same image data from a server over a network and where the laptop's display is observed under a first illuminant and the smartphone's display is observed under a second illuminant, CATs can assist with enabling both displays to maintain a desired uniform appearance even as users' visions are subjected to different ambient lighting conditions. The desired perceived appearance can be constrained according to principles of color constancy.
CATs can be implemented using matrices or look up tables (LUT). A matrix is a rectangular array of numbers, symbols, or expressions that are arranged in rows and columns. Matrices are represented in a same format: an m×n matrix, where m is the number of rows in the matrix, n is the number of columns in the matrix, and each individual item is represented ai,j, where maximum i=m and maximum j=n. An exemplary matrix used to implement a CAT is a 3×3 matrix.
An LUT is an array that replaces runtime computation with a simpler array indexing operation. In image processing, an LUT is used to transform input image data into a more desirable output format. Examples of LUTs used to represent a CAT include a one dimensional LUT (1D LUT) and a three dimensional LUT (3D LUT). A 1D LUT usually has an exact output value for a corresponding input value. For example, when a pixel is represented in an RGB (red green blue) color model, a 1D LUT includes an output R value for every input R value, an output G value for every input G value, and an output B value for every input B value. 1D LUTs, however, are limited in that they cannot alter color saturation without affecting contrast or brightness. A 3D LUT, on the other hand, is an LUT that includes a coordinate set of colors. As an example, an RGB coordinate of (0, 0, 448) could be directly transformed to (128, 0, 832) in a 3D LUT. If a 3D LUT had corresponding matches for each coordinate set, the files would be large and difficult for electronic systems to use. Thus, in practice 3D LUTs usually have a set of 17 coordinates on each axis (red, green, and blue) from which other, unknown values are interpolated to various levels of accuracy.
As alluded to above, some non-trivial differences arise when a CAT uses matrices instead of LUTs (or vice versa). For example, an amount of computational resources (e.g., processing power, memory, computation time, etc.) required to process a matrix might be relatively lower than an amount of computational resources required to process an LUT. In addition, some displays may be equipped with electronic components that enable processing matrices but not components that enable processing LUTs (or vice versa). Due to these differences, it may be difficult to achieve a uniform presentation of output image data on multiple devices receiving the same input image data when one or more of these devices is configured to work with matrices but not LUTs (or vice versa). Furthermore, even when a display includes components that enable processing of matrices and LUTs, such a display may engage in wasteful use of computational resources because the display's components may require computational resources for both processing operations.